স্প্রিং বুট ORM (Object-Relational Mapping) ব্যবহার করার সময় ডেটাবেস টেবিলগুলোর মধ্যে সম্পর্ক স্থাপন করার জন্য Entity Relationship খুব গুরুত্বপূর্ণ। Entity Relationship বিভিন্ন ডেটাবেস টেবিল এবং তাদের মধ্যে থাকা সম্পর্কগুলো জাভা ক্লাসের মাধ্যমে প্রকাশ করে।
Entity Relationship এর ধরন
ডেটাবেসে সাধারণত তিন ধরণের সম্পর্ক থাকে, এবং এগুলো Entity Relationship এর মাধ্যমে স্প্রিং বুট ORM-এ প্রকাশ করা হয়:
১. One-to-One (১:১ সম্পর্ক)
একটি টেবিলের একটি রেকর্ড আরেকটি টেবিলের একটি রেকর্ডের সাথে সম্পর্কযুক্ত থাকে।
২. One-to-Many এবং Many-to-One (১:একাধিক এবং একাধিক:১ সম্পর্ক)
একটি টেবিলের একটি রেকর্ড আরেকটি টেবিলের একাধিক রেকর্ডের সাথে সম্পর্কযুক্ত থাকে।
৩. Many-to-Many (একাধিক:একাধিক সম্পর্ক)
একটি টেবিলের একাধিক রেকর্ড আরেকটি টেবিলের একাধিক রেকর্ডের সাথে সম্পর্কযুক্ত থাকে।
স্প্রিং বুটে Entity Relationship এর অ্যানোটেশন
Spring Boot ORM (Hibernate) এ Entity Relationship প্রকাশ করার জন্য নিম্নলিখিত অ্যানোটেশনগুলো ব্যবহার করা হয়:
@OneToOne@OneToMany@ManyToOne@ManyToMany@JoinColumn@JoinTable
Entity Relationship এর উদাহরণ
১. One-to-One সম্পর্ক
একজন ব্যবহারকারীর একটি প্রোফাইল থাকতে পারে।
import jakarta.persistence.*;
@Entity
public class User {
@Id
@GeneratedValue
private Long id;
private String name;
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "profile_id", referencedColumnName = "id")
private Profile profile;
// Getters and Setters
}
@Entity
public class Profile {
@Id
@GeneratedValue
private Long id;
private String bio;
// Getters and Setters
}
ব্যাখ্যা:
@OneToOne:UserএবংProfileএর মধ্যে ১:১ সম্পর্ক স্থাপন করে।@JoinColumn:Userটেবিলেprofile_idকলাম যোগ করে যাProfileটেবিলেরidকলামের সাথে যুক্ত।
২. One-to-Many এবং Many-to-One সম্পর্ক
একজন লেখকের অনেক বই থাকতে পারে।
import jakarta.persistence.*;
import java.util.List;
@Entity
public class Author {
@Id
@GeneratedValue
private Long id;
private String name;
@OneToMany(mappedBy = "author", cascade = CascadeType.ALL)
private List<Book> books;
// Getters and Setters
}
@Entity
public class Book {
@Id
@GeneratedValue
private Long id;
private String title;
@ManyToOne
@JoinColumn(name = "author_id", referencedColumnName = "id")
private Author author;
// Getters and Setters
}
ব্যাখ্যা:
@OneToMany: একজন লেখকের একাধিক বইয়ের সম্পর্ক নির্দেশ করে।@ManyToOne: একটি বইয়ের সাথে শুধুমাত্র একজন লেখকের সম্পর্ক নির্দেশ করে।mappedBy:Author-এরbooksফিল্ডBookEntity-তে সম্পর্ক স্থাপন করে।
৩. Many-to-Many সম্পর্ক
একজন শিক্ষার্থী একাধিক কোর্সে ভর্তি হতে পারে, এবং একটি কোর্সে একাধিক শিক্ষার্থী থাকতে পারে।
import jakarta.persistence.*;
import java.util.Set;
@Entity
public class Student {
@Id
@GeneratedValue
private Long id;
private String name;
@ManyToMany
@JoinTable(
name = "student_course",
joinColumns = @JoinColumn(name = "student_id"),
inverseJoinColumns = @JoinColumn(name = "course_id")
)
private Set<Course> courses;
// Getters and Setters
}
@Entity
public class Course {
@Id
@GeneratedValue
private Long id;
private String title;
@ManyToMany(mappedBy = "courses")
private Set<Student> students;
// Getters and Setters
}
ব্যাখ্যা:
@ManyToMany:StudentএবংCourseএর মধ্যে একাধিক:একাধিক সম্পর্ক নির্দেশ করে।@JoinTable: সম্পর্কের জন্য একটি মধ্যবর্তী টেবিল (student_course) তৈরি করে।mappedBy:Student-এরcoursesফিল্ড এবংCourse-এরstudentsফিল্ডের মধ্যে সম্পর্ক নির্দেশ করে।
Cascade এবং Fetch টাইপ
Entity Relationship এর ক্ষেত্রে Cascade এবং Fetch গুরুত্বপূর্ণ ভূমিকা পালন করে।
Cascade
- Cascade টাইপ (যেমন
ALL,PERSIST,REMOVE) ব্যবহার করে সংযুক্ত Entity-তে নির্দিষ্ট অপারেশন প্রযোজ্য করা যায়।
Fetch
- Fetch টাইপ (যেমন
LAZY,EAGER) ব্যবহার করে ডেটা লোডিং স্ট্র্যাটেজি নির্ধারণ করা হয়।
সারাংশ
Spring Boot ORM এ Entity Relationship বিভিন্ন টেবিলের মধ্যে সম্পর্ক স্থাপন করে ডেটা মডেলিং সহজ করে। @OneToOne, @OneToMany, @ManyToOne, এবং @ManyToMany অ্যানোটেশন ব্যবহার করে ডেটাবেস টেবিলের মধ্যে সম্পর্ক নির্ধারণ করা যায়। এই সম্পর্কগুলোর মাধ্যমে ডেটাবেস অপারেশন আরও কার্যকর এবং পুনঃব্যবহারযোগ্য হয়।
Read more